export default{
  // 为当前模块开启命名空间
  namespaced: true,
  state:{
    // 购物车的数组，用来存储购物车中每个商品的信息对象
    // 每个商品的信息对象，都包含如下 6 个属性：
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart: JSON.parse(uni.getStorageSync('cart')||'[]'),
  },
  actions:{},
  mutations:{
    //向购物车添加商品信息
    addToCart(state,goods){
      //根据goods_id来进行判断商品已添加购物车,没有找到返回undefined
      //找到就返回第一个对应goods_id的商品对象
      const findResult = state.cart.find((item)=>item.goods_id === goods.goods_id)
      if(!findResult){
        //说明购物车没有该商品信息:     进行添加到购物车中
        state.cart.push(goods)
      }else{
        //购物车已有该商品信息:      商品的数量进行加一
        findResult.goods_count ++
      }
      //数据进行修改时，就进行持久化技术存储：
      this.commit('m_cart/saveToStorage')
    },
    //更新购物车商品的勾选状态：
    updateState(state,goods){
      //通过goods_id查找到对应的商品：
      const findResult = state.cart.find((item)=>item.goods_id === goods.goods_id)
      if(findResult){
        //找到了对应id的商品就对其状态进行修改：
        findResult.goods_state = goods.goods_state
        //进行持久化的存储：
        this.commit("m_cart/saveToStorage")
      }
    },
    //更新购物车商品的数量：
    updateCount(state,goods){
      const findResult = state.cart.find((item)=>item.goods_id === goods.goods_id)
      if(findResult){
        findResult.goods_count = goods.goods_count
        //进行持久化的存储：
        this.commit("m_cart/saveToStorage")
      }
    },
    //更新所有购物车中商品的选中状态：
    updateAllState(state,flag){
      state.cart.forEach((item)=>item.goods_state = flag)
      //对数据进行持久化存储：
      this.commit("m_cart/saveToStorage")
    },
    //删除购物车的商品信息
    cutGoods(state,goods){
      state.cart = state.cart.filter(item=>item.goods_id !== goods.goods_id)
      //进行持久化的存储：
      this.commit("m_cart/saveToStorage")
    },
    //对store中的数据cart进行持久化的存储：
    saveToStorage(state){
      uni.setStorageSync('cart',JSON.stringify(state.cart))
    },
    
  },
  getters:{
    //统计购物车商品的总数量
    total(state){
      return state.cart.reduce((num,goods)=>num + goods.goods_count,0)
    },
    //获取勾选商品的总数量：
    checkedCount(state){
      //获取已勾选的商品，并将其放入数组当中
      const array = state.cart.filter(item=>item.goods_state)
      //对已勾选商品的数量进行累加：
      return array.reduce((num,goods)=>num + goods.goods_count,0)
    },
    //获取勾选商品的总价格：
    checkedAllPrice(state){
      //获取已勾选的商品，并将其放入数组当中
      const array = state.cart.filter(item=>item.goods_state)
      //对已勾选商品的价格进行累加：
      return array.reduce((num,goods)=>num + goods.goods_price*goods.goods_count,0).toFixed(2)
    },
    //获取已勾选的商品列表：
    checkedCart(state){
      return state.cart.filter(item=>item.goods_state).map(x => ({ goods_id: x.goods_id, goods_number: x.goods_count, goods_price: x.goods_price }))
    }
  }
}